import Vue from 'vue'
import VueRouter from 'vue-router'
import store from '../store'
import HomeView from '../views/HomeView.vue'
import IndexView from '../views/IndexView/IndexView.vue'

Vue.use(VueRouter)

const routes = [
  {
    path: '/',
    name: 'home',
    component: HomeView,
    children: [
      {
        path: '',
        name: 'Index',
        component: IndexView,
        meta: { // 每个路由对象都可以定义 meta 属性，该属性是一个对象，可以设置任意属性名
          auth: true, // 表明该路径需要登陆后才可以访问
        }
      },
      {
        // path: 'cart',
        path: '/cart', // 完整
        name: 'Cart',
        component: () => import('../views/CartView/CartView.vue')
      }
    ]
  },
  {
    path: '/about',
    name: 'about',
    component: () => import('../views/AboutView.vue'),
    meta: {
      auth: true
    }
  },
  {
    path: '/login',
    name: 'Login',
    component: () => import('../views/LoginView/LoginView.vue')
  }
]

const router = new VueRouter({
  // mode: 'history', // 路由模式，与 java 合作的时候，建议使用 hash
  base: process.env.BASE_URL,
  routes
})

// 在访问路由之前判断
// 怎么判断？
// 根据访问的路径中 auth 是否为 true
// 路由守卫 - 登录拦截
router.beforeEach((to, from, next) => {
  const token = store.state.token; // 表示用户登录的凭证

  if (to.meta.auth) { // 如果路由中的 meta 字段下的 auth 为true，表示该路由必须登录后访问
    if (token) { // token 存在，表示已经登陆了，那么想干嘛干嘛去
      next();
    } else { // 不存在，表明你没有登录，不好意思，回到登录页
      next('/login');
    }
  } else { // 不需要登录就可以访问
    next(); // 直接下一步
  }
})

export default router
